// Loesung_von_Aufgabe_8.4_5_Festkoerper_3D

// Erstellt eine Liste aller Atome aus der Klasse Lennard
ArrayList<Lennard> Atome = new ArrayList<Lennard>();

void setup()
{
  size(400, 400, P3D);

  for (int x = 0; x < 4; x++)
  {
    for (int y = 0; y < 4; y++)
    {
      for (int z = 0; z < 4; z++)
      {
        // Lennard(PVector rTemp, PVector vTemp, float mTemp, float DTemp, PVector cTemp)
        Lennard Atom = new Lennard(new PVector(-50 + x * 40, -50 + y * 40, -50 + z * 40), new PVector(0, 0, 0), 1, 10, new PVector(0, 0, 255));
        Atome.add(Atom); //Das Atom an Position (x,y) wird der Liste aller Atome hinzugefügt
      }
    }
  }
}

void draw()
{
  background(200);
  translate(200, 200, 0);

  rotateY(0.01 * mouseX);
  rotateX(-0.1 * mouseY);

  stroke(255, 0, 0);
  strokeWeight(5);
  line(-100, 0, 0, 100, 0, 0);
  stroke(0, 255, 0);
  line(0, -100, 0, 0, 100, 0);
  stroke(255, 255, 0);
  line(0, 0, -100, 0, 0, 100);

  for (int i = 0; i < Atome.size(); i++) // Bei ArrayList wird nicht "length", sondern "size" verwendet
  {
    for (int j = 0; j < Atome.size(); j++)
    {
      if (i == j)
        continue; // Wenn i == j (Wechselwirkung mit sich selbst), dann überspringe diesen Schritt und fahre mit dem Programm fort

      Atome.get(i).force(Atome.get(j)); //Anstatt Atome[i] benutzt man bei ArrayList Atome.get(i)
    }
  }

  for (int i = 0; i < Atome.size(); i++)
  {
    Atome.get(i).move(0.05);
    Atome.get(i).display();
  }
}